package com.ly.common.core.text;

import com.ly.common.utils.StringUtils;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;


/**
 * 字符集工具类
 * @author ruoyi
 */
public class CharsetKit {
    /**
     * ISO-8859-1
     */
    public static final String ISO_8859_1 = "ISO-8859-1";
    /**
     * UTF-8
     */
    public static final String UTF_8 = "UTF-8";
    /**
     * GBK
     */
    public static final String GBK = "GBK";

    /**
     * ISO-8859-1
     */
    public static final Charset CHARSET_ISO_8859_1 = Charset.forName ( ISO_8859_1 );
    /**
     * UTF-8
     */
    public static final Charset CHARSET_UTF_8 = Charset.forName ( UTF_8 );
    /**
     * GBK
     */
    public static final Charset CHARSET_GBK = Charset.forName ( GBK );

    /**
     * 转换为Charset对象
     * @param charset 字符集，为空则返回默认字符集
     * @return Charset
     */
    public static Charset charset (String charset) {
        return StringUtils.isEmpty ( charset ) ? Charset.defaultCharset () : Charset.forName ( charset );
    }

    /**
     * 转换字符串的字符集编码
     * @param source      字符串
     * @param srcCharset  源字符集，默认ISO-8859-1
     * @param destCharset 目标字符集，默认UTF-8
     * @return 转换后的字符集
     */
    public static String convert (String source, String srcCharset, String destCharset) {
        return convert ( source, Charset.forName ( srcCharset ), Charset.forName ( destCharset ) );
    }

    /**
     * 转换字符串的字符集编码
     * @param source      字符串
     * @param srcCharset  源字符集，默认ISO-8859-1
     * @param destCharset 目标字符集，默认UTF-8
     * @return 转换后的字符集
     */
    public static String convert (String source, Charset srcCharset, Charset destCharset) {
        if ( null == srcCharset ) {
            srcCharset = StandardCharsets.ISO_8859_1;
        }

        if ( null == destCharset ) {
            srcCharset = StandardCharsets.UTF_8;
        }

        if ( StringUtils.isEmpty ( source ) || srcCharset.equals ( destCharset ) ) {
            return source;
        }
        return new String ( source.getBytes ( srcCharset ), destCharset );
    }

    /**
     * @return 系统字符集编码
     */
    public static String systemCharset () {
        return Charset.defaultCharset ().name ();
    }
}
